package br.unipe.compilador.recuperacao;

import java.util.HashSet;
import java.util.Iterator;
import br.unipe.compilador.analisador.Gramatica;

public class RecoverySet extends HashSet<Integer> {
	private static final long serialVersionUID = -548413133404925042L;

	/**
	 * Cria conjunto vazio
	 */
	public RecoverySet() {
		super();
	}

	/**
	 * Cria conjunto com 1 tipo de token
	 * @param num
	 */
	public RecoverySet(int num) {		 
		this.add(new Integer(num));
	}

	/**
	 * Verifica se token pertence ao conjunto
	 * @param num
	 * @return 
	 */
	public boolean contains(int num) {		 
		return super.contains(new Integer(num));
	}

	/**
	 * Faz a união de dois conjuntos
	 * @param s Uma lista a se unir com a lista atual
	 * @return Retorna um terceiro conjunto, sem destruir nenhum
	 */
	public RecoverySet union(RecoverySet s)
	{
		RecoverySet t = null;

		if (s != null) // se s == null retorna null
		{
			t = (RecoverySet) this.clone();
			t.addAll(s);
		}

		return t;
	}

	/**
	 * Retira 1 elemento do conjunto
	 * @param num
	 * @return Retorna um novo conjunto, sem 1 dos elementos
	 */
	public RecoverySet remove(int num) // 
	{
		RecoverySet t = (RecoverySet) this.clone();
		t.remove(new Integer(num));

		return t;
	}

	/**
	 * Cria string descrevendo os tokens que pertencem ao conjunto 
	 */
	@SuppressWarnings("rawtypes")
	public String toString() {
		Iterator it = this.iterator();
		String s = "";
		int k;

		while (it.hasNext()) {
			k = ((Integer) it.next()).intValue();
			//s += (Gramatica.im(k) + " ");
		}

		return s;
	}

}
